/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * frmTablaAuxiliarDet.java
 *
 * Created on 19-ago-2011, 20:59:39
 */

package GUI;

import TablasAuxiliares.TablaAuxiliarBase;
import Util.GestorErrores;
import javax.swing.JOptionPane;
import Util.Varios;

/**
 *
 * @author Javi
 */
public class frmTablaAuxiliarDet extends javax.swing.JDialog {

    //Indica la operación que se está realizando
    private char _cOperacion;
    //Referencia al formulario padre
    private frmTablaAuxiliar _frmPadre;
    //Referencia al objeto de datos principal
    private TablaAuxiliarBase _oTablaAux;

    /** Creates new form frmTablaAuxiliarDet */
    public frmTablaAuxiliarDet(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        getRootPane().setDefaultButton(jButtonAceptar);
    }

    /** Creates new form frmTablaAuxiliarDet */
    public frmTablaAuxiliarDet(frmTablaAuxiliar parent, boolean modal) {
        super(parent, modal);
        this._frmPadre = parent;
        //Inicializo la referencia al objeto de datos del formulario padre.
        this._oTablaAux = parent.getoObjetoDatos();
        initComponents();
        getRootPane().setDefaultButton(jButtonAceptar);
    }

    /*
     * Este método captura los datos introducidos por el usuario y los carga en los atributos
     * correspondientes de la clase.
     */
    private void pantallaAClase(){
        this._frmPadre.getoObjetoDatos().setsCodigo( this.jTextFieldCod.getText() );
        this._frmPadre.getoObjetoDatos().setsDescripcion( this.jTextFieldDescrip.getText() );
        this._oTablaAux.setsCodigo( this.jTextFieldCod.getText() );
        this._oTablaAux.setsDescripcion( this.jTextFieldDescrip.getText() );
    }

    /*
     * Este método carga los atributos de la clase los controles del formulario de entrada.
     */
    private void claseAPantalla(){
        this.jTextFieldCod.setText( this._frmPadre.getoObjetoDatos().getsCodigo() );
        this.jTextFieldDescrip.setText(  this._frmPadre.getoObjetoDatos().getsDescripcion() );
        this.jTextFieldCod.setText( this._oTablaAux.getsCodigo() );
        this.jTextFieldDescrip.setText(  this._oTablaAux.getsDescripcion() );
    }

    public void inicializaFormulario ( char cOperacion ){
        //Inicializo el código de operación
        this._cOperacion = cOperacion;
        //Carga los datos de la clase
        this.claseAPantalla();
        //Inicializa los controles necesarios
        this.inicializaControles();
    }

    /*
     * Este método carga y habilita/inhabilita los controles que sean necesarios 
     */
    private void inicializaControles (){
        //Actualizo el título de la ventana en función de la operación.
        this.setTitle( this._frmPadre.getoObjetoDatos().getsDescripTabla() + " - " + Varios.getLiteralOperacion(this._cOperacion) );
        this.setTitle( this._oTablaAux.getsDescripTabla() + " - " + Varios.getLiteralOperacion(this._cOperacion) );
        if ( this._cOperacion == 'M' || this._cOperacion == 'C' || this._cOperacion == 'B')
            jTextFieldCod.setEditable( false );
        else
            jTextFieldCod.setEditable( true );
        if ( this._cOperacion == 'C' || this._cOperacion == 'B')
            jTextFieldDescrip.setEditable( false );
        else
            jTextFieldDescrip.setEditable( true);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jTextFieldCod = new javax.swing.JTextField();
        jTextFieldDescrip = new javax.swing.JTextField();
        jButtonAceptar = new javax.swing.JButton();
        jButtonCancelar = new javax.swing.JButton();

        setResizable(false);

        jLabel1.setText("Código:");

        jLabel2.setText("Descripción:");

        jTextFieldCod.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFieldCodActionPerformed(evt);
            }
        });

        jTextFieldDescrip.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFieldDescripActionPerformed(evt);
            }
        });

        jButtonAceptar.setText("Aceptar");
        jButtonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAceptarActionPerformed(evt);
            }
        });

        jButtonCancelar.setText("Cancelar");
        jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel1)
                            .addComponent(jLabel2))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jTextFieldDescrip, javax.swing.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
                            .addComponent(jTextFieldCod, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jButtonAceptar)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonCancelar)
                        .addGap(126, 126, 126))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextFieldCod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextFieldDescrip, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonAceptar)
                    .addComponent(jButtonCancelar))
                .addContainerGap(18, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAceptarActionPerformed
        boolean bResultadoOK = false;
        this.pantallaAClase ();
        //Inicializo el vector global de errores
        GestorErrores.getInstancia().getvErrores().clear();
        if (this._cOperacion == 'A')    //Alta
            bResultadoOK = this._oTablaAux.insert();
        else if (this._cOperacion == 'M')    //Actualizacion
            bResultadoOK = this._oTablaAux.update();
        else if (this._cOperacion == 'B'){    //Borrado
            //Pedir confirmación para borrar
            if ( JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog( null, "Va a borrar el registro \n¿Está seguro?" ,"Aviso", JOptionPane.YES_NO_OPTION))
                bResultadoOK = this._oTablaAux.delete();
            else
                return;     //Se cancela la operación
        }else if (this._cOperacion == 'C')    //Consulta
            bResultadoOK = true;

        if ( !bResultadoOK ){
            //Si ha habido errores informo de ellos
            String mensaje = "¡Error en la operación!" + "\n";
            for (int i= 0; i< GestorErrores.getInstancia().getvErrores().size(); i++)
                mensaje = mensaje + GestorErrores.getInstancia().getvErrores().get(i) + "\n";
            JOptionPane.showMessageDialog( null, mensaje,"Aviso", JOptionPane.WARNING_MESSAGE);
        }else{
            //Si no ha habido errores doy mensaje de información de la operación
            if (this._cOperacion == 'A')    //Alta
                JOptionPane.showMessageDialog( null, "Alta realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
            else if (this._cOperacion == 'M')    //Actualizacion
                JOptionPane.showMessageDialog( null, "Modificación realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
            else if (this._cOperacion == 'B')    //Borrado
                JOptionPane.showMessageDialog( null, "Baja realizada","Aviso", JOptionPane.INFORMATION_MESSAGE);
            //Si la operación es una CONSULTA no doy ningún aviso.
            //Actualizo la vista de los datos en el formulario padre
            this._frmPadre.actualizarVista("");
        }
        //Ocultar la ventana solo si el resultado ha sido OK.
        setVisible ( (bResultadoOK)? false:true );
    }//GEN-LAST:event_jButtonAceptarActionPerformed

    private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelarActionPerformed
        setVisible ( false );
    }//GEN-LAST:event_jButtonCancelarActionPerformed

    private void jTextFieldCodActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextFieldCodActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jTextFieldCodActionPerformed

    private void jTextFieldDescripActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextFieldDescripActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jTextFieldDescripActionPerformed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonAceptar;
    private javax.swing.JButton jButtonCancelar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JTextField jTextFieldCod;
    private javax.swing.JTextField jTextFieldDescrip;
    // End of variables declaration//GEN-END:variables

}
